#include "myserial.h"
#include <QDebug>
MySerial::MySerial(QObject *parent) : QObject(parent)
{

}

MySerial::~MySerial()
{

}

/*  函数名称: Serial_Open
 *  函数作用: 打开串口且初始化串口参数
 *
 */
bool MySerial::Serial_Open(QMap<QString, QString> map)
{
    if(map.contains("COM")     == false      //端口
     ||map.contains("Baud")    == false      //波特率
     ||map.contains("Stop")    == false      //停止位
     ||map.contains("Verify")  == false      //校验位
     ||map.contains("DataBit") == false)     //数据位
    {
        return false;
    }
    SerialPort.setPortName(map["COM"]);
    if(SerialPort.open(QIODevice::ReadWrite))
    {
        // 设置波特率
        SerialPort.setBaudRate(map["Baud"].toInt());
        //设置数据位数
        switch(map["DataBit"].toInt())
        {
            case 5: SerialPort.setDataBits(QSerialPort::Data5); break;
            case 6: SerialPort.setDataBits(QSerialPort::Data6); break;
            case 7: SerialPort.setDataBits(QSerialPort::Data7); break;
            case 8: SerialPort.setDataBits(QSerialPort::Data8); break;
            default: break;
        }
        //设置奇偶校验

        if(map["Verify"] == "Even")     SerialPort.setParity(QSerialPort::EvenParity);
        else if(map["Verify"] == "Odd") SerialPort.setParity(QSerialPort::OddParity);
        else                            SerialPort.setParity(QSerialPort::NoParity);
        // 设置流控制
        SerialPort.setFlowControl(QSerialPort::NoFlowControl);
        //设置停止位
        switch(map["Stop"].toInt())
        {
            case 1: SerialPort.setStopBits(QSerialPort::OneStop); break;
            case 2: SerialPort.setStopBits(QSerialPort::TwoStop); break;
            default: break;
        }
        return true;
    }
    else
    {
        return false;
    }
}

/*  函数名称: Serial_Close
 *  函数作用: 关闭串口
 *
 */
void MySerial::Serial_Close()
{
    SerialPort.close();
}

/*  函数名称：get_SystemPort
 *  函数作用：获取可用端口
 *
 */
QList<QString> MySerial::get_SystemPort()
{
    QList<QString>  Port;
    foreach(const QSerialPortInfo &info,QSerialPortInfo::availablePorts())
    {
        Port.append(info.portName());
    }
    return Port;
}

/*  函数名称: RevData
 *  函数作用: 串口接收数据
 *
 */
void MySerial::RevData()
{
    QByteArray buffer = SerialPort.readAll();
    if(!buffer.isEmpty())
    {
        QString Str = buffer.toHex().data();
        emit getRev(Str);
    }
}


/*  函数名称: SendData
 *  函数作用: 串口发送数据
 *
 */
void MySerial::SendData(QString Str)
{
    QByteArray Dat;
    Dat = Str.toUtf8();
    SerialPort.write(Dat);
}

void MySerial::Test()
{
    static int i= 0;
    qDebug() <<i++<< SerialPort.baudRate() << endl;
}
